package com.stars.module.code.service;

import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.stars.base.entity.CommonDTO;
import com.stars.base.entity.Result;
import com.stars.module.code.entity.StarCode;

/**
 * @author : Rocks
 * @version : 1.0
 * @date : 2022/10/28 23:31
 * @description : 数据代码服务接口
 */
public interface CodeService {

    /**
     * 同步加载代码管理树
     * @author : Rocks
     * @date :  2023/2/25 22:01
     * @return JSONArray 以ElementUI树结构返回代码树
     */
    JSONArray loadCodeTree();

    /**
     * 根据FID加载当前节点全部子节点
     * @author : Rocks
     * @date :  2023/2/25 22:02
     * @param dto 查询条件
     * @return JSONObject 返回代码管理列表数据 <br> list-列表数据 <br> total-列表总数
     */
    JSONObject loadCodeListByFid(CommonDTO dto);

    /**
     * 根据ID获取代码管理数据
     * @author : Rocks
     * @date :  2023/2/25 22:08
     * @param id 要查询代码主键
     * @return StarCode 代码对象
     */
    StarCode loadCodeById(String id);

    /**
     * 根据代码ID和代码类型删除代码
     * @author : Rocks
     * @date :  2023/2/25 22:09
     * @param codeId 代码主键
     * @param type 代码类型 1-文件夹 2-代码值
     * @return Result 成功 success 失败 error
     */
    Result removeCode(String codeId,String type);

    /**
     * 保存或更新代码值
     * @author : Rocks
     * @date :  2023/2/25 22:09
     * @param code 代码值
     * @return Result 成功 success 失败 error
     */
    Result saveOrUpdateCode(StarCode code);

    /**
     * 根据父节点ID获取当前节点下子节点最大排序
     * @author : Rocks
     * @date :  2023/2/25 22:10
     * @param fid 父节点ID
     * @return int 当前父节点下子节点最大排序，如果没有子节点返回0
     */
    int getMaxIndex (String fid);

    /**
     * 根据节点的FID获取字节的代码
     * @author : Rocks
     * @date :  2023/2/25 22:11
     * @param fid 父节点ID
     * @return JSONArray [{label:'显示值',value:'代码值'}]
     */
    JSONArray getCode(String fid);

    /**
     * 根据父节点ID以树的形式获取当前节点以及子节点信息
     * @author : Rocks
     * @date :  2023/2/25 22:11
     * @param fids 父节点ID，多个ID用逗号分割
     * @return JSONArray
     */
    JSONArray getCodeByTree(String fids);

    /**
     * 获取数据代码目录树
     * @author : Rocks
     * @date :  2023/7/22 19:56
     * @return JSONArray
     */
    JSONArray getCodeGroupTree();
}
